package 代码记录.指定公司代码练习记录.腾讯云智.算法22年;

/**
 * @author zx
 * @create 2023-03-12 16:44
 */
public class 寻找峰值_162 {
    /**
     * @return 叶姐题解
     * O(n)
     */
    public int findPeakElement(int[] nums) {
        for(int i = 0;i < nums.length;i++){
            boolean ok = true;
            if(i - 1 >= 0 && nums[i] <= nums[i - 1]){
                ok = false;
            }
            if(i + 1 < nums.length && nums[i + 1] >= nums[i]){
                ok = false;
            }
            if(ok) return i;
        }
        return -1;
    }

    /**
     * @return 二分优化
     * 这道题没有找到(left <= right)的模板
     * 这种的二分看着有点迷
     */
    public int findPeakElement2(int[] nums) {
        int left = 0, right = nums.length - 1;
        while(left < right){
            int mid = left + ((right - left) >> 1);
            if(nums[mid] > nums[mid + 1]){
                right = mid;
            }else{
                left = mid + 1;
            }
        }
        return right;
    }


    /**
     * @return 官方题解看不懂
     * O(n)
     */
    public int findPeakElement3(int[] nums) {
        int res = 0;
        for (int i = 1; i < nums.length; ++i) {
            if (nums[i] > nums[res]) {
                res = i;
            }
        }
        return res;
    }
}
